package gestionCandidats;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.SortedSet;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.BevelBorder;

import modele.Demande;
import modele.Dossier;
import modele.Etudiant;
import modele.Fiche;
import modele.Parcours;

public class DemandeAfficheAction 
extends AbstractAction  {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	static String[] entete = {"", "Parcours"};

	GestionCandidats appli;
	DossierAfficheAction daa;
	EtudiantAfficheAction eaa;
	FicheSuiteAction fsa;

	JPanel vue;
	JScrollPane scrollpane;
	JPanel panel;
	JComboBox<String>[] jcb;
	JButton suite, abondon;
	SortedSet<Parcours> lParcours;
	Dossier dos;

	protected DemandeAfficheAction(GestionCandidats appli,
			DossierAfficheAction daa,
			EtudiantAfficheAction eaa)
	throws Exception {
		super("DemandeAfficheAction");	
		this.appli = appli;
		this.daa = daa;
		this.eaa = eaa;
		vue = appli.getDemandeAffiche();
		lParcours = appli.getBd().getParcours();
	}	

	public Component getVue(){
		return vue;
	}

	public EtudiantAfficheAction getPere(){
		return eaa;
	}

	public Dossier getDossier(){
		return dos;
	}

	public JComboBox<String>[] getJcb(){
		return jcb;
	}

	private ActionListener abondonAction() {
		ActionListener abondonListener = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					dos.abondon();
					vue.setVisible(false);
					daa.actionPerformed(e);
				}
				catch (Exception ex){}
			}
		};
		return abondonListener;
	}

	public Integer[] getParcoursIdent() throws Exception {
		// on compte les vrais parcours
		// on elimine "Autre" et les doublons
		int nb = 0;
		for (int i=0; i<jcb.length; i++)
			if (jcb[i].getSelectedIndex() != lParcours.size()) {
				boolean deja = false;
				for (int j=0; j<i; j++)
					deja |=  (jcb[j].getSelectedIndex() == 
						jcb[i].getSelectedIndex());
				if (!deja)
					nb++;
			}
		Integer[] aux = new Integer[nb];
		nb = 0;
		for (int i=0; i<jcb.length; i++)
			if (jcb[i].getSelectedIndex() != lParcours.size()) {
				boolean deja = false;
				for (int j=0; j<i; j++)
					deja |=  (jcb[j].getSelectedIndex() == 
						jcb[i].getSelectedIndex());
				if (!deja)
					aux[nb++] = new Integer(jcb[i].getSelectedIndex());
			}
		return aux;
	}

	private JComboBox<String> getParcoursJCB(int init) throws Exception {
		JComboBox<String> parcoursJCB = new JComboBox<String>();
		for(Parcours par : lParcours) {
			parcoursJCB.addItem(par.getIntitule());
		}
		parcoursJCB.addItem("Aucun");
		parcoursJCB.setSelectedIndex(init);
		return parcoursJCB;
	}

	@SuppressWarnings("unchecked")
	public void actionPerformed(ActionEvent e) {
		try {
			if(vue == null) {
				// l'info
				vue = new JPanel();
				vue.setLayout(new BorderLayout());
				appli.add(vue,BorderLayout.CENTER);

				panel = new JPanel();
				panel.setLayout(new GridLayout(0,2));
				vue.add(panel, BorderLayout.CENTER);

				scrollpane = new JScrollPane();
				scrollpane.setBorder(new BevelBorder(BevelBorder.LOWERED));
				panel.add(scrollpane,BorderLayout.CENTER);

				// les boutons
				JPanel pied = new JPanel();
				vue.add(pied, BorderLayout.SOUTH);
				abondon = new JButton("Abondon");
				abondon.addActionListener(abondonAction());
				pied.add(abondon);
				suite = new JButton("Suite");
				fsa = new FicheSuiteAction(appli,daa,this);
				suite.addActionListener(fsa);
				pied.add(suite);
			}
			// on initialise afin de traiter le premier parcours
			fsa.setIndiceParcours(0);
			dos = eaa.getDossier();
			Etudiant etu = dos.getEtudiant();
			final Demande demande = dos.addDemande();
			panel.removeAll();
			panel.add(new JLabel("Dossier "+etu.getIdApoflux()));
			panel.add(new JLabel(etu.getEtablissementOrigine()));
			panel.add(new JLabel(etu.getNom()));
			panel.add(new JLabel(etu.getPrenom()));
			panel.add(new JLabel(entete[0]));
			panel.add(new JLabel(entete[1]));
			List<Fiche> fiches = demande.getFiches();
			jcb = new JComboBox[lParcours.size()];
			for (int i=0; i<fiches.size(); i++) {
				jcb[i] = getParcoursJCB(fiches.get(i).getParcours().getIdent());
				panel.add(new JLabel("Choix "+(i+1)));
				panel.add(jcb[i]);
			}
			for (int i=fiches.size(); i<jcb.length; i++) {
				jcb[i] = getParcoursJCB(new Integer(lParcours.size()));
				panel.add(new JLabel("Choix "+(i+1)));
				panel.add(jcb[i]);
			}
			eaa.getVue().setVisible(false);

			vue.setVisible(true);
			appli.getFrame().setVisible(true);
		}
		catch(Exception ex){
			JOptionPane.showMessageDialog(appli, ex.getMessage(), "Mise a jour des demandes : Attention",JOptionPane.ERROR_MESSAGE);
		}
	}
}
